package com.extraxue.ChainOfResponsibility;

import java.util.ArrayList;
import java.util.List;

public class Main {

    public static void main(String[] args) {
        Msg msg = new Msg();

        msg.setMsg("大家好:)，<script>欢迎访问 extraxue.com ，大家都是996");

        FilterChain fc  = new FilterChain();
//        链式编程
        fc.add(new HTMLFiler()).add(new SensitiveFilter());

        fc.doFilter(msg);

        System.out.println(msg);
    }

}

class Msg{
    private String name;
    private String msg;

    String getMsg() {
        return msg;
    }

    void setMsg(String msg) {
        this.msg = msg;
    }

    @Override
    public String toString() {
        return "Msg{" +
                "msg='" + msg + '\'' +
                '}';
    }
}

interface Filter{
    void doFilter(Msg m);
}

class HTMLFiler implements Filter{

    @Override
    public void doFilter(Msg m) {
        String r = m.getMsg();
        r = r.replace('<','[');
        r = r.replace('>',']');
        m.setMsg(r);
    }
}

class SensitiveFilter implements Filter{

    @Override
    public void doFilter(Msg m) {
        String r = m.getMsg();
        r = r.replaceAll("996","995");
        m.setMsg(r);
    }
}

//责任(功能)链
class FilterChain{

    private List<Filter> Filters = new ArrayList<>();

    FilterChain add(Filter f){
        Filters.add(f);
        return this;
    }

    void doFilter(Msg m){
        for (Filter f : Filters){
            f.doFilter(m);
        }
    }
}